package models

import (
	"gorm.io/gorm"
	"servers/basic/config"
	"time"
)

type Order struct {
	Id          uint           `gorm:"column:id;type:bigint UNSIGNED;primaryKey;not null;" json:"id"`
	OrderSn     string         `gorm:"column:order_sn;type:varchar(255);comment:订单号;not null;" json:"order_sn"` // 订单号
	UserId      uint           `gorm:"column:user_id;type:bigint UNSIGNED;not null;default:0;" json:"user_id"`
	CleanerId   uint           `gorm:"column:cleaner_id;type:bigint UNSIGNED;not null;default:0;" json:"cleaner_id"`
	Address     string         `gorm:"column:address;type:varchar(255);comment:服务地址;not null;" json:"address"`                                                               // 服务地址
	ServiceType uint           `gorm:"column:service_type;type:int UNSIGNED;comment:服务类型：1：日常保洁 2：深度清洁 3：开荒保洁 4：家电清洗;not null;default:0;" json:"service_type"`               // 服务类型：1：日常保洁 2：深度清洁 3：开荒保洁 4：家电清洗
	OrderPrice  uint           `gorm:"column:order_price;type:int UNSIGNED;comment:订单金额;not null;default:0;" json:"order_price"`                                             // 订单金额
	OrderStatus uint           `gorm:"column:order_status;type:int UNSIGNED;comment:订单状态：1:待接单 2：已接单 3：已拒单 4：已完成 5：待付款 6：已取消 7：已付款;not null;default:1;" json:"order_status"` // 订单状态：1:待接单 2：已接单 3：已拒单 4：已完成 5：待付款 6：已取消 7：已付款
	CreatedAt   time.Time      `gorm:"column:created_at;type:datetime(3);not null;default:CURRENT_TIMESTAMP(3);" json:"created_at"`
	UpdatedAt   time.Time      `gorm:"column:updated_at;type:datetime(3);not null;default:CURRENT_TIMESTAMP(3);" json:"updated_at"`
	DeletedAt   gorm.DeletedAt `gorm:"column:deleted_at;type:datetime(3);default:NULL;" json:"deleted_at"`
}

func (o *Order) TableName() string {
	return "order"
}
func (o *Order) GetOrderById() error {
	return config.DB.Where("id = ?", o.Id).Limit(1).Find(&o).Error
}

// 创建订单
func (o *Order) CreateOrder() error {
	return config.DB.Create(&o).Error
}

// 获取订单详情
func (o *Order) GetOrderDetail() error {
	return config.DB.Where("id = ?", o.Id).Find(&o).Error
}

// 修改订单状态
func (o *Order) UpdateOrderStatus() error {
	return config.DB.Where("id = ?", o.Id).Updates(&o).Error
}

// 拒绝订单
func (o *Order) DeleteOrder() error {
	return config.DB.Where("id = ?", o.Id).Delete(&o).Error
}
